今天是8/8...來首"Daddy"吧!
1.Ruby迴圈中的Iteration複習,與Enumerable簡介。
前篇文章的範例
shake = ["head", "hand", "body"]
2.7.3 :133 > shake.each {|part| puts "Shake your #{part}!"}
Shake your head!
Shake your hand!
Shake your body!
=> ["head", "hand", "body"]
當然,如果想瞭解Iteration這個詞,直接上wiki查就好,這邊只會分享,在Rails中,each常常會見到。
再次提醒Iteration(迭代)語法後面會接block。
array.each do |a|
#流程控制
end
#也可寫作
array.each { |a| #流程控制 }
#do..end 或 { }就是block的寫法。
#|a|中,| |是black內的語法,通常我們會使用迭代或Enumerable(枚舉)時,對象資料(物件, 實體)通常為陣列或雜湊,| |中裡面的變數,代表對象裡每一個資料的臨時名稱,所以可依照變數原則隨意命名。
菜鳥式回答:枚舉是迭代的進化。
範例舉例
def num_add(array)
#流程控制區
end
p num_add([1, 2, 3]) #=> [2, 3, 4]
題目:我希望一個數字陣列資料,使用num_add這個方法後,"回傳"新的陣列,新陣列裡每個數字是舊陣列每個數字+1。
迭代解法
def num_add(array)
#我需要一個新陣列
#將舊陣列裡每個數字+1後,並放進新陣列裡。
#回傳這個新陣列
end
def num_add(array)
new_arr = [] #new_arr = Array.new 。
array.each {|num| new_array << num + 1} #我也習慣,簡短的流程控制用{},複雜的用do..end。
new_arr #return new_arr, return可省略
end
p num_add([1, 2, 3])
# << 特殊語法,想成將東西加入陣列。
疑問:
Ans:有回傳值,回傳原陣列給你,所以自己定義方法時要注意,要明確告知回傳什麼資料。
有執行+1,可是你沒有告訴電腦要顯示給你看。
一些特性等特別學習Block(程式碼區塊)後就會更了解。
補充:
2.7.3 :002 > [1, 2, 3].each {|num| puts num + 1 }
2
3
4
=> [1, 2, 3]
def num_add(array)
array.map {|num| num + 1 }
end
#流程控制:將陣列裡每個數字+1後回傳給我。
2.7.3 :001 > [1, 2, 3].map { |num| num + 1 }
=> [2, 3, 4]
嗯,完成,第一次看到我也是覺得WTF。(尤其我是素人)
我的確是一開始完全看不懂到底發生何事的那種初學者,但其實迭代與枚舉並不是只有Ruby才有這種觀念,很多程式語言都會有,但了解邏輯之後,其實就很簡單了。
當然如果只會迭代也不是不可以,但就像有更好用的武器不用,硬要拿折斷的鐵劍打王,很累的。(Dark soul梗)